import router from '@/routers/index'
import { LOGIN_URL } from '@/config'
import { RouteRecordRaw } from 'vue-router'
import { ElNotification } from 'element-plus'
import { useAuthStore } from '@/stores/modules/auth'
import { removeToken } from '@/utils/token'
// 引入 views 文件夹下所有 vue 文件
const modules = import.meta.glob('@/views/**/*.vue')
/* Layout */
// import Layout from '@/layouts/index.vue'
// 动态路由，基于用户权限动态去加载
export const dynamicRoutes: RouteRecordRaw[] = []

/**
 * @description 初始化动态路由
 */
export const initDynamicRouter = async () => {
  const authStore = useAuthStore()

  try {
    // 1.获取菜单列表 && 按钮权限列表
    await authStore.getAuthMenuList()
    // 2.判断当前用户有没有菜单权限
    if (!authStore.authMenuListGet.length) {
      ElNotification({
        title: '无权限访问',
        message: '当前账号无任何菜单权限，请联系系统管理员！',
        type: 'warning',
        duration: 3000
      })
      removeToken()
      router.replace(LOGIN_URL)
      return Promise.reject('No permission')
    }

    // 3.添加动态路由
    authStore.flatMenuListGet.forEach(item => {
      if (item.component === 'Layout' || item.component === 'ParentView') {
        delete item.component
      }
      item.children && delete item.children
      if (item.component && typeof item.component == 'string') {
        item.component = loadView(item.component)
      }
      if (item.meta?.full) {
        router.addRoute(item as unknown as RouteRecordRaw)
      } else {
        router.addRoute('layout', item as unknown as RouteRecordRaw)
      }
    })
  } catch (error) {
    // 当按钮 || 菜单请求出错时，重定向到登陆页
    removeToken()
    router.replace(LOGIN_URL)
    return Promise.reject(error)
  }
}

export const loadView = (view: any) => {
  let res
  for (const path in modules) {
    const dir = path.split('views/')[1].split('.vue')[0]
    if (dir === view) {
      res = () => modules[path]()
    }
  }
  return res
}
